
#include "InputEvent.h"

#include "../Enamerations/MouseButtons.h"


#ifndef UTILS_MOUSEEVENT
#define UTILS_MOUSEEVENT

class MouseEvent : public InputEvent {
public:
	MouseEvent() = default;
	virtual ~MouseEvent() = default;
};

class MouseMoveEvent : public MouseEvent {
public:
	const double x;
	const double y;
	const MouseButton button;

	MouseMoveEvent(
		const double _x,
		const double _y,
		const MouseButton _button
	) : x(_x), y(_y), button(_button) {}
};

class MouseButtonEvent : public MouseEvent {
public:
	const MouseButton button;
	const int clickCount;
	const bool shiftDown;
	const bool controlDown;
	const bool altDown;

	MouseButtonEvent(
		const MouseButton _button,
		const int _clickCount,
		const bool _shiftDown,
		const bool _controlDown,
		const bool _altDown
	) : button(_button),
		clickCount(_clickCount),
		shiftDown(_shiftDown),
		controlDown(_controlDown),
		altDown(_altDown) {}

	MouseButtonEvent(
		const MouseButton _button,
		const int _clickCount
	) : MouseButtonEvent(_button, _clickCount, false, false, false) {}

	virtual ~MouseButtonEvent() = default;
};

class MouseScrollEvent : public MouseEvent {
public:
	const double xoffset;
	const double yoffset;

	MouseScrollEvent(const double _xoffest, const double _yoffest)
		: xoffset(_xoffest), yoffset(_yoffest) {}
	virtual ~MouseScrollEvent() = default;
};

#endif // UTILS_MOUSEEVENT
